/**
 * 验证手机号码
 * @param phone
 */
export const isPhone = (phone: string) => {
    return /^[1][3-9][0-9]{9}$/.test(phone)
}

// 处理时间
export const formatDate = (dateString: string) => {
    if (!dateString) return '暂无时间';
    try {
        const now = new Date();

        // 处理iOS兼容性问题
        let processedDateString = dateString;
        if (typeof dateString === 'string' && dateString.includes('-') && dateString.includes(' ')) {
            // 如果是 "yyyy-MM-dd HH:mm:ss" 格式，转换为 "yyyy/MM/dd HH:mm:ss"
            processedDateString = dateString.replace(/-/g, '/');
        } else if (typeof dateString === 'string' && /^\d{4}-\d{2}-\d{2}$/.test(dateString)) {
            // 如果是 "yyyy-MM-dd" 格式，转换为 "yyyy/MM/dd"
            processedDateString = dateString.replace(/-/g, '/');
        }

        const msgDate = new Date(processedDateString);

        // 验证日期是否有效
        if (isNaN(msgDate.getTime())) {
            return dateString.split(' ')[0] || dateString;
        }

        // 计算时间差
        const diffTime = now.getTime() - msgDate.getTime();
        const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));

        if (diffDays === 0) {
            // 今天，显示时间
            const timePart = dateString.split(' ')[1];
            return timePart || dateString;
        } else if (diffDays === 1) {
            // 昨天
            return '昨天';
        } else if (diffDays < 7) {
            // 一周内，显示几天前
            return `${diffDays}天前`;
        } else {
            // 超过一周，显示日期
            return dateString.split(' ')[0] || dateString;
        }
    } catch (e) {
        // 如果日期解析失败，返回原始字符串
        return dateString.split(' ')[0] || dateString;
    }
}

/**
 * Markdown 文本处理工具类
 * 提供去除 Markdown 语法符号的共用方法
 */

/**
 * 去除 Markdown 中的所有格式符号，返回纯文本
 * @param {string} markdown - 包含 Markdown 语法的文本
 * @returns {string} 去除格式符号后的纯文本
 */
export function removeMarkdownSymbols(markdown: any) {
    if (!markdown || typeof markdown !== 'string') {
        return '';
    }

    let text = markdown;

    // 1. 去除代码块 ```code```
    text = text.replace(/```[\s\S]*?```/g, '');

    // 2. 去除行内代码 `code`
    text = text.replace(/`([^`]+)`/g, '$1');

    // 3. 去除图片 ![alt](url)
    text = text.replace(/!\[([^\]]*)\]\([^)]+\)/g, '$1');

    // 4. 去除链接 [text](url)
    text = text.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');

    // 5. 去除标题符号 # ## ### #### ##### ######
    text = text.replace(/^\s*#{1,6}\s*/gm, '');

    // 6. 去除粗体 **text** 或 __text__
    text = text.replace(/(\*\*|__)(.*?)\1/g, '$2');

    // 7. 去除斜体 *text* 或 _text_
    text = text.replace(/(\*|_)(.*?)\1/g, '$2');

    // 8. 去除删除线 ~~text~~
    text = text.replace(/~~(.*?)~~/g, '$1');

    // 9. 去除引用符号 >
    text = text.replace(/^>\s*/gm, '');

    // 10. 去除无序列表符号 - * +
    text = text.replace(/^[\s]*[-\*\+]\s+/gm, '');

    // 11. 去除有序列表符号 1. 2. 3.
    text = text.replace(/^[\s]*\d+\.\s+/gm, '');

    // 12. 去除分割线 --- *** ___
    text = text.replace(/^[\s]*[-\*_]{3,}[\s]*$/gm, '');

    // 13. 去除表格分隔符 |
    text = text.replace(/\|/g, ' ');

    // 14. 去除表格对齐符号 :---: :--- ---:
    text = text.replace(/^[\s]*:?-+:?[\s]*$/gm, '');

    // 15. 去除HTML标签
    text = text.replace(/<[^>]*>/g, '');

    // 16. 去除HTML实体符号（如&nbsp;等）
    text = text.replace(/&nbsp;/g, ' ');
    text = text.replace(/&ensp;/g, ' ');
    text = text.replace(/&emsp;/g, ' ');

    // 统一处理所有空白字符和换行
    text = text.replace(/\s+/g, ' ');
    return text;
}

/**
 * 简化版去除 Markdown 符号（保留基本格式）
 * @param {string} markdown - 包含 Markdown 语法的文本
 * @returns {string} 去除部分格式符号后的文本
 */
export function removeBasicMarkdownSymbols(markdown: any) {
    if (!markdown || typeof markdown !== 'string') {
        return '';
    }

    let text = markdown;

    // 只去除最常见的格式符号
    // 1. 去除标题符号
    text = text.replace(/^\s*#{1,6}\s*/gm, '');

    // 2. 去除粗体符号
    text = text.replace(/(\*\*|__)(.*?)\1/g, '$2');

    // 3. 去除斜体符号
    text = text.replace(/(\*|_)(.*?)\1/g, '$2');

    // 4. 去除行内代码符号
    text = text.replace(/`([^`]+)`/g, '$1');

    // 5. 去除链接，保留链接文本
    text = text.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');

    return text.trim();
}

/**
 * 提取 Markdown 文本的纯文本摘要
 * @param {string} markdown - 包含 Markdown 语法的文本
 * @param {number} maxLength - 最大长度，默认200字符
 * @returns {string} 文本摘要
 */
export function getMarkdownSummary(markdown: any, maxLength = 200) {
    const cleanText = removeMarkdownSymbols(markdown);

    if (cleanText.length <= maxLength) {
        return cleanText;
    }

    // 在合适的位置截断，避免切断单词
    let summary = cleanText.substring(0, maxLength);
    const lastSpaceIndex = summary.lastIndexOf(' ');

    if (lastSpaceIndex > maxLength * 0.8) {
        summary = summary.substring(0, lastSpaceIndex);
    }

    return summary + '...';
}

/**
 * 检查文本是否包含 Markdown 语法
 * @param {string} text - 要检查的文本
 * @returns {boolean} 是否包含 Markdown 语法
 */
export function hasMarkdownSyntax(text: any) {
    if (!text || typeof text !== 'string') {
        return false;
    }

    // 检查常见的 Markdown 语法模式
    const markdownPatterns = [
        /^#{1,6}\s+/m,           // 标题
        /(\*\*|__).+?\1/,        // 粗体
        /(\*|_).+?\1/,           // 斜体
        /`[^`]+`/,               // 行内代码
        /```[\s\S]*?```/,        // 代码块
        /\[.+?\]\(.+?\)/,        // 链接
        /!\[.*?\]\(.+?\)/,       // 图片
        /^>\s+/m,                // 引用
        /^[\s]*[-\*\+]\s+/m,     // 无序列表
        /^[\s]*\d+\.\s+/m,       // 有序列表
        /^[\s]*[-\*_]{3,}[\s]*$/m // 分割线
    ];

    return markdownPatterns.some(pattern => pattern.test(text));
}